home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Medal Software 2
/
Gold Medal Software Volume 2 (Gold Medal) (1994).iso
/
windows
/
win31
/
macsyma.arj
/
MACSDEMO.EXE
/
SPECFUN.OUT
< prev
next >
Wrap
Text File
|
1993-09-14
|
31KB
|
494 lines
(c1) /* DEMONSTRATION OF SPECIAL FUNCTION PACKAGE `SPECFUN'
TWO METHODS FOR COMPUTING SPECIAL FUNCTIONS
Many of the special functions computed by MACSYMA can be computed in two
ways, using commands with two different syntaxes:
SPECFUNCTION(N,X) The argument syntax tells MACSYMA to compute the
function from an explicit formula. Nothing is saved
to assist with future evaluations. This method is
faster for isolated single evaluations.
SPECFUNCTION[N](X) The subscript syntax tells MACSYMA to compute the
function from a recurrence relation, and store for reuse
some intermediate results. When several function
evaluations are made, this is much more efficient.
We will demonstrate by turning on the switch SHOWTIME
*/
(remarray(legendre_p,alegendre_p,%alegendre_p,legendre_q,sharmonic_y,
sbessel_j,sneumann_n,shankel_h1,gegenbauer_c,%gegenbauer_c,
hermite_h,shankel_h2,laguerre_l,alaguerre_l,%alaguerre_l,
chebyshev_t,chebyshev_u,jacobi_p,%jacobi_p),
if get('specfun,'version)=false then load("specfun"), showtime:true)$
C:\MACSD2B\share\specfun.fas being loaded.
C:\MACSD2B\share\specfun2.fas being loaded.
Time= 4010 msecs
(c2) legendre_p(10,x);
Time= 490 msecs
|$label(0,15,Times New Roman,$(d2$))$q(46189$in( )$sup(x,10)$in( - )109395$in( )$sup(x,8)$in( + )90090$in( )$sup(x,6)$in( - )30030$in( )$sup(x,4)$in( + )3465$in( )$sup(x,2)$in( - )63,256)
(c3) legendre_p[10](x);
Time= 390 msecs
|$label(0,15,Times New Roman,$(d3$))$q(46189$in( )$sup(x,10)$in( - )109395$in( )$sup(x,8)$in( + )90090$in( )$sup(x,6)$in( - )30030$in( )$sup(x,4)$in( + )3465$in( )$sup(x,2)$in( - )63,256)
(c4) /* When we repeat these commands, the times are very different: */
legendre_p(10,x);
Time= 59 msecs
|$label(0,15,Times New Roman,$(d4$))$q(46189$in( )$sup(x,10)$in( - )109395$in( )$sup(x,8)$in( + )90090$in( )$sup(x,6)$in( - )30030$in( )$sup(x,4)$in( + )3465$in( )$sup(x,2)$in( - )63,256)
(c5) legendre_p[10](x);
Time= 0 msecs
|$label(0,15,Times New Roman,$(d5$))$q(46189$in( )$sup(x,10)$in( - )109395$in( )$sup(x,8)$in( + )90090$in( )$sup(x,6)$in( - )30030$in( )$sup(x,4)$in( + )3465$in( )$sup(x,2)$in( - )63,256)
(c6) /* Time savings from multiple evaluations also occur
for numerical evaluations */
legendre_p(10,2);
Time= 59 msecs
|$label(0,15,Times New Roman,$(d6$))$q(24591493,256)
(c7) legendre_p[10](2);
Time= 49 msecs
|$label(0,15,Times New Roman,$(d7$))$q(24591493,256)
(c8) /* The command with subscript syntax has also stored
the lower order polynomials: */
legendre_p(8,x);
Time= 0 msecs
|$label(0,15,Times New Roman,$(d8$))$q(6435$in( )$sup(x,8)$in( - )12012$in( )$sup(x,6)$in( + )6930$in( )$sup(x,4)$in( - )1260$in( )$sup(x,2)$in( + )35,128)
(c9) legendre_p[8](x);
Time= 0 msecs
|$label(0,15,Times New Roman,$(d9$))$q(6435$in( )$sup(x,8)$in( - )12012$in( )$sup(x,6)$in( + )6930$in( )$sup(x,4)$in( - )1260$in( )$sup(x,2)$in( + )35,128)
(c10) /* The command with subscript syntax recurses back to the
highest order polynomial previously called, which
saves time on subsequent evaluation of higher degree
polynomials.
*/
legendre_p(11,x);
Time= 59 msecs
|$label(0,15,Times New Roman,$(d10$))$q(88179$in( )$sup(x,11)$in( - )230945$in( )$sup(x,9)$in( + )218790$in( )$sup(x,7)$in( - )90090$in( )$sup(x,5)$in( + )15015$in( )$sup(x,3)$in( - )693$in( )x,256)
(c11) legendre_p[11](x);
Time= 49 msecs
|$label(0,15,Times New Roman,$(d11$))$q(88179$in( )$sup(x,11)$in( - )230945$in( )$sup(x,9)$in( + )218790$in( )$sup(x,7)$in( - )90090$in( )$sup(x,5)$in( + )15015$in( )$sup(x,3)$in( - )693$in( )x,256)
(c12) /* MACSYMA can evaluate some special values of functions.
Answer "Y;" to the following question */
legendre_p(n,-1);
|$label(-1,15,Times New Roman,)Is $in()n$in() $in()an integer$in()? $(Answer e.g. yes; no; unknown; or help; .$)
Y;
Time= 9609 msecs
|$label(0,15,Times New Roman,$(d12$))$sup($open($()$in( - )1$close($)),n)
(c13) /* Note that the command with subscript syntax does not know
how to reduce this value */
legendre_p[n](-1);
Time= 219 msecs
|$label(0,15,Times New Roman,$(d13$))$sub(legendre_p,n)$paren($in( - )1)
(c14) /* Answer "Y;" to the following question */
legendre_p(n,0);
|$label(-1,15,Times New Roman,)Is $in()n$in() $in()an integer$in()? $(Answer e.g. yes; no; unknown; or help; .$)
Y;
Time= 3899 msecs
|$label(0,15,Times New Roman,$(d14$))$q($sup($paren($in( - )1,$(,$)),n$in(/)2)$in( )$paren($sup($paren($in( - )1,$(,$)),n)$in( + )1,$(,$))$in( )$paren($over(n,$q(n,2),Y)),2$in( )$sup(4,n$in(/)2))
(c15) legendre_p[n](0);
Time= 0 msecs
|$label(0,15,Times New Roman,$(d15$))$sub(legendre_p,n)$paren(0)
(c16) showtime:false$
(c17) /* If one wishes to rename a special function:
for example %p for Legendre_P */
%p(n,x):=subst('%p,nounify('legendre_p),legendre_p(n,x))$
(c18) %p(5,x) - legendre_p(5,x);
|$label(0,15,Times New Roman,$(d18$))0
(c19) /* *********************************************
Legendre Polynomials,
Associated Legendre Polynomials,
Gegenbauer Polynomials
*/
for n from 0 thru 3 do
ldisplay(legendre_p(n,x),legendre_p[n](x))$
|$label(0,15,Times New Roman,$(e19$))legendre_p$paren(0$ina($, )$hinge()x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e20$))$sub(legendre_p,0)$paren(x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e21$))legendre_p$paren(1$ina($, )$hinge()x)$hinge()$in( = )x
|$label(0,15,Times New Roman,$(e22$))$sub(legendre_p,1)$paren(x)$hinge()$in( = )x
|$label(0,15,Times New Roman,$(e23$))legendre_p$paren(2$ina($, )$hinge()x)$hinge()$in( = )$q(3$in( )$sup(x,2)$in( - )1,2)
|$label(0,15,Times New Roman,$(e24$))$sub(legendre_p,2)$paren(x)$hinge()$in( = )$q(3$in( )$sup(x,2)$in( - )1,2)
|$label(0,15,Times New Roman,$(e25$))legendre_p$paren(3$ina($, )$hinge()x)$hinge()$in( = )$q(5$in( )$sup(x,3)$in( - )3$in( )x,2)
|$label(0,15,Times New Roman,$(e26$))$sub(legendre_p,3)$paren(x)$hinge()$in( = )$q(5$in( )$sup(x,3)$in( - )3$in( )x,2)
(c27) for n from 0 thru 3 do
ldisplay(legendre_q(n,x))$
|$label(0,15,Times New Roman,$(e27$))legendre_q$paren(0$ina($, )$hinge()x)$hinge()$in( = )$q(log$paren($q(x$in( + )1,1$in( - )x)),2)
|$label(0,15,Times New Roman,$(e28$))legendre_q$paren(1$ina($, )$hinge()x)$hinge()$in( = )$q(x$in( )log$paren($q(x$in( + )1,1$in( - )x)),2)$hinge()$in( - )1
|$label(0,15,Times New Roman,$(e29$))legendre_q$paren(2$ina($, )$hinge()x)$hinge()$in( = )$q($paren(3$in( )$sup(x,2)$in( - )1,$(,$))$in( )log$paren($q(x$in( + )1,1$in( - )x)),4)$hinge()$in( - )$q(3$in( )x,2)
|$label(0,15,Times New Roman,$(e30$))legendre_q$paren(3$ina($, )$hinge()x)$hinge()$in( = )$q($paren(5$in( )$sup(x,3)$in( - )3$in( )x,$(,$))$in( )log$paren($q(x$in( + )1,1$in( - )x)),4)$hinge()$in( - )$q(15$in( )$sup(x,2)$in( - )4,6)
(c31) for n from 0 thru 2 do
for m from 0 thru n do
ldisplay(alegendre_p(n,m,x),alegendre_p[n,m](x))$
|$label(0,15,Times New Roman,$(e31$))alegendre_p$paren(0$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e32$))$sub(alegendre_p,0$ina($, )$hinge()0)$paren(x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e33$))alegendre_p$paren(1$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )x
|$label(0,15,Times New Roman,$(e34$))$sub(alegendre_p,1$ina($, )$hinge()0)$paren(x)$hinge()$in( = )x
|$label(0,15,Times New Roman,$(e35$))alegendre_p$paren(1$ina($, )$hinge()1$ina($, )$hinge()x)$hinge()$in( = )$in( - )$sqrt(1$in( - )$sup(x,2))
|$label(0,15,Times New Roman,$(e36$))$sub(alegendre_p,1$ina($, )$hinge()1)$paren(x)$hinge()$in( = )$in( - )$sqrt(1$in( - )$sup(x,2))
|$label(0,15,Times New Roman,$(e37$))alegendre_p$paren(2$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )$q(3$in( )$sup(x,2)$in( - )1,2)
|$label(0,15,Times New Roman,$(e38$))$sub(alegendre_p,2$ina($, )$hinge()0)$paren(x)$hinge()$in( = )$q(3$in( )$sup(x,2)$in( - )1,2)
|$label(0,15,Times New Roman,$(e39$))alegendre_p$paren(2$ina($, )$hinge()1$ina($, )$hinge()x)$hinge()$in( = )$in( - )3$in( )x$in( )$sqrt(1$in( - )$sup(x,2))
|$label(0,15,Times New Roman,$(e40$))$sub(alegendre_p,2$ina($, )$hinge()1)$paren(x)$hinge()$in( = )$in( - )3$in( )x$in( )$sqrt(1$in( - )$sup(x,2))
|$label(0,15,Times New Roman,$(e41$))alegendre_p$paren(2$ina($, )$hinge()2$ina($, )$hinge()x)$hinge()$in( = )3$hinge()$in( )$open($()1$hinge()$in( - )$sup(x,2)$close($))
|$label(0,15,Times New Roman,$(e42$))$sub(alegendre_p,2$ina($, )$hinge()2)$paren(x)$hinge()$in( = )3$hinge()$in( - )3$in( )$sup(x,2)
(c43) for n from 0 thru 2 do
for m from 0 thru n do
ldisplay(alegendre_q(n,m,x))$
|$label(0,15,Times New Roman,$(e43$))alegendre_q$paren(0$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e44$))alegendre_q$paren(1$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )$q(x$in( )log$paren($q(x$in( + )1,1$in( - )x)),2)$hinge()$in( - )1
|$label(0,15,Times New Roman,$(e45$))alegendre_q$paren(1$ina($, )$hinge()1$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q($sup(x,2)$in( )$sqrt(1$in( - )$sup(x,2))$in( )log$paren($in( - )$q(x$in( + )1,x$in( - )1))$in( - )$sqrt(1$in( - )$sup(x,2))$in( )log$paren($in( - )$q(x$in( + )1,x$in( - )1))$in( - )2$in( )x$in( )$sqrt(1$in( - )$sup(x,2)),2$in( )$sup(x,2)$in( - )2)
|$label(0,15,Times New Roman,$(e46$))alegendre_q$paren(2$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )$q($paren(3$in( )$sup(x,2)$in( - )1,$(,$))$in( )log$paren($q(x$in( + )1,1$in( - )x)),4)$hinge()$in( - )$q(3$in( )x,2)
|$label(0,15,Times New Roman,$(e47$))alegendre_q$paren(2$ina($, )$hinge()1$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q(3$in( )$sup(x,3)$in( )$sqrt(1$in( - )$sup(x,2))$in( )log$paren($in( - )$q(x$in( + )1,x$in( - )1))$in( - )3$in( )x$in( )$sqrt(1$in( - )$sup(x,2))$in( )log$paren($in( - )$q(x$in( + )1,x$in( - )1))$in( - )6$in( )$sup(x,2)$in( )$sqrt(1$in( - )$sup(x,2))$in( + )4$in( )$sqrt(1$in( - )$sup(x,2)),2$in( )$sup(x,2)$in( - )2)
|$label(0,15,Times New Roman,$(e48$))alegendre_q$paren(2$ina($, )$hinge()2$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q(3$in( )$sup(x,4)$in( )log$paren($in( - )$q(x$in( + )1,x$in( - )1))$in( - )6$in( )$sup(x,2)$in( )log$paren($in( - )$q(x$in( + )1,x$in( - )1))$in( + )3$in( )log$paren($in( - )$q(x$in( + )1,x$in( - )1))$in( - )6$in( )$sup(x,3)$in( + )10$in( )x,2$in( )$sup(x,2)$in( - )2)
(c49) for n from 0 thru 2 do
for a from 1 thru n do
ldisplay(gegenbauer_c(n,a,x),gegenbauer_c[n](a,x))$
|$label(0,15,Times New Roman,$(e49$))gegenbauer_c$paren(1$ina($, )$hinge()1$ina($, )$hinge()x)$hinge()$in( = )2$hinge()$in( )x
|$label(0,15,Times New Roman,$(e50$))$sub(gegenbauer_c,1)$paren(1$ina($, )$hinge()x)$hinge()$in( = )2$hinge()$in( )x
|$label(0,15,Times New Roman,$(e51$))gegenbauer_c$paren(2$ina($, )$hinge()1$ina($, )$hinge()x)$hinge()$in( = )4$in( )$sup(x,2)$hinge()$in( - )1
|$label(0,15,Times New Roman,$(e52$))$sub(gegenbauer_c,2)$paren(1$ina($, )$hinge()x)$hinge()$in( = )4$in( )$sup(x,2)$hinge()$in( - )1
|$label(0,15,Times New Roman,$(e53$))gegenbauer_c$paren(2$ina($, )$hinge()2$ina($, )$hinge()x)$hinge()$in( = )12$in( )$sup(x,2)$hinge()$in( - )2
|$label(0,15,Times New Roman,$(e54$))$sub(gegenbauer_c,2)$paren(2$ina($, )$hinge()x)$hinge()$in( = )12$in( )$sup(x,2)$hinge()$in( - )2
(c55) /* *********************************************
Hermite Polynomials,
Laguerre Polynomials,
Associated Laguerre Polynomials
*/
for n from 0 thru 3 do
ldisplay(hermite_h(n,x),hermite_h[n](x))$
|$label(0,15,Times New Roman,$(e55$))hermite_h$paren(0$ina($, )$hinge()x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e56$))$sub(hermite_h,0)$paren(x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e57$))hermite_h$paren(1$ina($, )$hinge()x)$hinge()$in( = )2$hinge()$in( )x
|$label(0,15,Times New Roman,$(e58$))$sub(hermite_h,1)$paren(x)$hinge()$in( = )2$hinge()$in( )x
|$label(0,15,Times New Roman,$(e59$))hermite_h$paren(2$ina($, )$hinge()x)$hinge()$in( = )4$in( )$sup(x,2)$hinge()$in( - )2
|$label(0,15,Times New Roman,$(e60$))$sub(hermite_h,2)$paren(x)$hinge()$in( = )4$in( )$sup(x,2)$hinge()$in( - )2
|$label(0,15,Times New Roman,$(e61$))hermite_h$paren(3$ina($, )$hinge()x)$hinge()$in( = )8$in( )$sup(x,3)$hinge()$in( - )12$in( )x
|$label(0,15,Times New Roman,$(e62$))$sub(hermite_h,3)$paren(x)$hinge()$in( = )8$in( )$sup(x,3)$hinge()$in( - )12$in( )x
(c63) for n from 0 thru 3 do
ldisplay(laguerre_l(n,x),laguerre_l[n](x))$
|$label(0,15,Times New Roman,$(e63$))laguerre_l$paren(0$ina($, )$hinge()x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e64$))$sub(laguerre_l,0)$paren(x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e65$))laguerre_l$paren(1$ina($, )$hinge()x)$hinge()$in( = )1$hinge()$in( - )x
|$label(0,15,Times New Roman,$(e66$))$sub(laguerre_l,1)$paren(x)$hinge()$in( = )1$hinge()$in( - )x
|$label(0,15,Times New Roman,$(e67$))laguerre_l$paren(2$ina($, )$hinge()x)$hinge()$in( = )$q($sup(x,2)$in( - )4$in( )x$in( + )2,2)
|$label(0,15,Times New Roman,$(e68$))$sub(laguerre_l,2)$paren(x)$hinge()$in( = )$q($sup(x,2)$in( - )4$in( )x$in( + )2,2)
|$label(0,15,Times New Roman,$(e69$))laguerre_l$paren(3$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q($sup(x,3)$in( - )9$in( )$sup(x,2)$in( + )18$in( )x$in( - )6,6)
|$label(0,15,Times New Roman,$(e70$))$sub(laguerre_l,3)$paren(x)$hinge()$in( = )$in( - )$q($sup(x,3)$in( - )9$in( )$sup(x,2)$in( + )18$in( )x$in( - )6,6)
(c71) for n from 0 thru 2 do
for a from 0 thru n do
ldisplay(alaguerre_l(n,a,x),alaguerre_l[n](a,x))$
|$label(0,15,Times New Roman,$(e71$))alaguerre_l$paren(0$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e72$))$sub(alaguerre_l,0)$paren(0$ina($, )$hinge()x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e73$))alaguerre_l$paren(1$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )1$hinge()$in( - )x
|$label(0,15,Times New Roman,$(e74$))$sub(alaguerre_l,1)$paren(0$ina($, )$hinge()x)$hinge()$in( = )1$hinge()$in( - )x
|$label(0,15,Times New Roman,$(e75$))alaguerre_l$paren(1$ina($, )$hinge()1$ina($, )$hinge()x)$hinge()$in( = )2$hinge()$in( - )x
|$label(0,15,Times New Roman,$(e76$))$sub(alaguerre_l,1)$paren(1$ina($, )$hinge()x)$hinge()$in( = )2$hinge()$in( - )x
|$label(0,15,Times New Roman,$(e77$))alaguerre_l$paren(2$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )$q($sup(x,2)$in( - )4$in( )x$in( + )2,2)
|$label(0,15,Times New Roman,$(e78$))$sub(alaguerre_l,2)$paren(0$ina($, )$hinge()x)$hinge()$in( = )$q($sup(x,2)$in( - )4$in( )x$in( + )2,2)
|$label(0,15,Times New Roman,$(e79$))alaguerre_l$paren(2$ina($, )$hinge()1$ina($, )$hinge()x)$hinge()$in( = )$q($sup(x,2)$in( - )6$in( )x$in( + )6,2)
|$label(0,15,Times New Roman,$(e80$))$sub(alaguerre_l,2)$paren(1$ina($, )$hinge()x)$hinge()$in( = )$q($sup(x,2)$in( - )6$in( )x$in( + )6,2)
|$label(0,15,Times New Roman,$(e81$))alaguerre_l$paren(2$ina($, )$hinge()2$ina($, )$hinge()x)$hinge()$in( = )$q($sup(x,2)$in( - )8$in( )x$in( + )12,2)
|$label(0,15,Times New Roman,$(e82$))$sub(alaguerre_l,2)$paren(2$ina($, )$hinge()x)$hinge()$in( = )$q($sup(x,2)$in( - )8$in( )x$in( + )12,2)
(c83) alaguerre_l(2,a,x);
|$label(-1,15,Times New Roman,)Is $in() $in()a$in( + )1$in() $in() positive$, negative$, or zero?
P;
|$label(0,15,Times New Roman,$(d83$))$q($sup(x,2)$in( + )$paren($in( - )2$in( )a$in( - )4,$(,$))$in( )x$in( + )$sup(a,2)$in( + )3$in( )a$in( + )2,2)
(c84) alaguerre_l(3,1/2,x);
|$label(0,15,Times New Roman,$(d84$))$in( - )$q(8$in( )$sup(x,3)$in( - )84$in( )$sup(x,2)$in( + )210$in( )x$in( - )105,48)
(c85) /* *********************************************
Chebyshev Polynomials t,
Chebyshev Polynomials u
*/
for n from 0 thru 3 do
ldisplay(chebyshev_t(n,x),chebyshev_t[n](x))$
|$label(0,15,Times New Roman,$(e85$))chebyshev_t$paren(0$ina($, )$hinge()x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e86$))$sub(chebyshev_t,0)$paren(x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e87$))chebyshev_t$paren(1$ina($, )$hinge()x)$hinge()$in( = )x
|$label(0,15,Times New Roman,$(e88$))$sub(chebyshev_t,1)$paren(x)$hinge()$in( = )x
|$label(0,15,Times New Roman,$(e89$))chebyshev_t$paren(2$ina($, )$hinge()x)$hinge()$in( = )2$in( )$sup(x,2)$hinge()$in( - )1
|$label(0,15,Times New Roman,$(e90$))$sub(chebyshev_t,2)$paren(x)$hinge()$in( = )2$in( )$sup(x,2)$hinge()$in( - )1
|$label(0,15,Times New Roman,$(e91$))chebyshev_t$paren(3$ina($, )$hinge()x)$hinge()$in( = )4$in( )$sup(x,3)$hinge()$in( - )3$in( )x
|$label(0,15,Times New Roman,$(e92$))$sub(chebyshev_t,3)$paren(x)$hinge()$in( = )4$in( )$sup(x,3)$hinge()$in( - )3$in( )x
(c93) for n from 0 thru 3 do
ldisplay(chebyshev_u(n,x),chebyshev_u[n](x))$
|$label(0,15,Times New Roman,$(e93$))chebyshev_u$paren(0$ina($, )$hinge()x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e94$))$sub(chebyshev_u,0)$paren(x)$hinge()$in( = )1
|$label(0,15,Times New Roman,$(e95$))chebyshev_u$paren(1$ina($, )$hinge()x)$hinge()$in( = )2$hinge()$in( )x
|$label(0,15,Times New Roman,$(e96$))$sub(chebyshev_u,1)$paren(x)$hinge()$in( = )2$hinge()$in( )x
|$label(0,15,Times New Roman,$(e97$))chebyshev_u$paren(2$ina($, )$hinge()x)$hinge()$in( = )4$in( )$sup(x,2)$hinge()$in( - )1
|$label(0,15,Times New Roman,$(e98$))$sub(chebyshev_u,2)$paren(x)$hinge()$in( = )4$in( )$sup(x,2)$hinge()$in( - )1
|$label(0,15,Times New Roman,$(e99$))chebyshev_u$paren(3$ina($, )$hinge()x)$hinge()$in( = )8$in( )$sup(x,3)$hinge()$in( - )4$in( )x
|$label(0,15,Times New Roman,$(e100$))$sub(chebyshev_u,3)$paren(x)$hinge()$in( = )8$in( )$sup(x,3)$hinge()$in( - )4$in( )x
(c101) /* *********************************************
Jacobi Polynomials
*/
for n from 1 thru 2 do
for a from 1 thru n do
ldisplay(jacobi_p(n,a,0,x),jacobi_p[n](a,0,x))$
|$label(0,15,Times New Roman,$(e101$))jacobi_p$paren(1$ina($, )$hinge()1$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )$q(3$in( )x$in( + )1,2)
|$label(0,15,Times New Roman,$(e102$))$sub(jacobi_p,1)$paren(1$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )$q(3$in( )x$in( + )1,2)
|$label(0,15,Times New Roman,$(e103$))jacobi_p$paren(2$ina($, )$hinge()1$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )$q(5$in( )$sup(x,2)$in( + )2$in( )x$in( - )1,2)
C:\MACSD2B\library1\combin.fas being loaded.
|$label(0,15,Times New Roman,$(e104$))$sub(jacobi_p,2)$paren(1$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )$q(20$in( )$sup(x,2)$in( + )8$in( )x$in( - )4,8)
|$label(0,15,Times New Roman,$(e105$))jacobi_p$paren(2$ina($, )$hinge()2$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )$q(15$in( )$sup(x,2)$in( + )10$in( )x$in( - )1,4)
|$label(0,15,Times New Roman,$(e106$))$sub(jacobi_p,2)$paren(2$ina($, )$hinge()0$ina($, )$hinge()x)$hinge()$in( = )$q(30$in( )$sup(x,2)$in( + )20$in( )x$in( - )2,8)
(c107) jacobi_p(0,a,b,x);
|$label(0,15,Times New Roman,$(d107$))1
(c108) jacobi_p(1,a,b,x);
|$label(0,15,Times New Roman,$(d108$))$q($paren(b$in( + )a$in( + )2,$(,$))$in( )x$in( - )b$in( + )a,2)
(c109) jacobi_p(2,a,b,x);
|$label(0,15,Times New Roman,$(d109$))$q($paren($sup(b,2)$in( + )$paren(2$in( )a$in( + )7,$(,$))$in( )b$in( + )$sup(a,2)$in( + )7$in( )a$in( + )12,$(,$))$in( )$sup(x,2)$in( + )$paren($in( - )2$in( )$sup(b,2)$in( - )6$in( )b$in( + )2$in( )$sup(a,2)$in( + )6$in( )a,$(,$))$in( )x$in( + )$sup(b,2)$in( + )$paren($in( - )2$in( )a$in( - )1,$(,$))$in( )b$in( + )$sup(a,2)$in( - )a$in( - )4,8)
(c110) /* *********************************************
Spherical Harmonics
*/
for n from 0 thru 2 do
for m from 0 thru n do
ldisplay(sharmonic_y(n,m,theta,phi),sharmonic_y[n,m](theta,phi))$
C:\MACSD2B\share\trigsimp.fas being loaded.
|$label(0,15,Times New Roman,$(e110$))sharmonic_y$paren(0$ina($, )$hinge()0$ina($, )$hinge()$greektext(q)$ina($, )$hinge()$greektext(f))$hinge()$in( = )$q(1,2$in( )$sqrt($greektext(p)))
|$label(0,15,Times New Roman,$(e111$))$sub(sharmonic_y,0$ina($, )$hinge()0)$paren($greektext(q)$ina($, )$hinge()$greektext(f))$hinge()$in( = )$q(1,2$in( )$sqrt($greektext(p)))
|$label(0,15,Times New Roman,$(e112$))sharmonic_y$paren(1$ina($, )$hinge()0$ina($, )$hinge()$greektext(q)$ina($, )$hinge()$greektext(f))$hinge()$in( = )$q($sqrt(3)$in( )cos$paren($greektext(q)),2$in( )$sqrt($greektext(p)))
|$label(0,15,Times New Roman,$(e113$))$sub(sharmonic_y,1$ina($, )$hinge()0)$paren($greektext(q)$ina($, )$hinge()$greektext(f))$hinge()$in( = )$q($sqrt(3)$in( )cos$paren($greektext(q)),2$in( )$sqrt($greektext(p)))
|$label(0,15,Times New Roman,$(e114$))sharmonic_y$paren(1$ina($, )$hinge()1$ina($, )$hinge()$greektext(q)$ina($, )$hinge()$greektext(f))$hinge()$in( = )$in( - )$q($sqrt(2)$in( )$sqrt(3)$in( )$sup($e(),$italictext(i)$in( )$greektext(f))$in( )sin$paren($greektext(q)),4$in( )$sqrt($greektext(p)))
|$label(0,15,Times New Roman,$(e115$))$sub(sharmonic_y,1$ina($, )$hinge()1)$paren($greektext(q)$ina($, )$hinge()$greektext(f))$hinge()$in( = )$in( - )$q($sqrt(2)$in( )$sqrt(3)$in( )$sup($e(),$italictext(i)$in( )$greektext(f))$in( )sin$paren($greektext(q)),4$in( )$sqrt($greektext(p)))
|$label(0,15,Times New Roman,$(e116$))sharmonic_y$paren(2$ina($, )$hinge()0$ina($, )$hinge()$greektext(q)$ina($, )$hinge()$greektext(f))$hinge()$in( = )$q($sqrt(5)$in( )$paren(3$in( )$sup(cos,2)$paren($greektext(q))$in( - )1,$(,$)),4$in( )$sqrt($greektext(p)))
|$label(0,15,Times New Roman,$(e117$))$sub(sharmonic_y,2$ina($, )$hinge()0)$paren($greektext(q)$ina($, )$hinge()$greektext(f))$hinge()$in( = )$q($sqrt(5)$in( )$paren(3$in( )$sup(cos,2)$paren($greektext(q))$in( - )1,$(,$)),4$in( )$sqrt($greektext(p)))
|$label(0,15,Times New Roman,$(e118$))sharmonic_y$paren(2$ina($, )$hinge()1$ina($, )$hinge()$greektext(q)$ina($, )$hinge()$greektext(f))$hinge()$in( = )$in( - )$q($sqrt(5)$in( )$sqrt(6)$in( )$sup($e(),$italictext(i)$in( )$greektext(f))$in( )cos$paren($greektext(q))$in( )sin$paren($greektext(q)),4$in( )$sqrt($greektext(p)))
|$label(0,15,Times New Roman,$(e119$))$sub(sharmonic_y,2$ina($, )$hinge()1)$paren($greektext(q)$ina($, )$hinge()$greektext(f))$hinge()$in( = )$in( - )$q($sqrt(5)$in( )$sqrt(6)$in( )$sup($e(),$italictext(i)$in( )$greektext(f))$in( )cos$paren($greektext(q))$in( )sin$paren($greektext(q)),4$in( )$sqrt($greektext(p)))
|$label(0,15,Times New Roman,$(e120$))sharmonic_y$paren(2$ina($, )$hinge()2$ina($, )$hinge()$greektext(q)$ina($, )$hinge()$greektext(f))$hinge()$in( = )$q($sqrt(5)$in( )$sqrt(6)$in( )$sup($e(),2$in( )$italictext(i)$in( )$greektext(f))$in( )$sup(sin,2)$paren($greektext(q)),8$in( )$sqrt($greektext(p)))
|$label(0,15,Times New Roman,$(e121$))$sub(sharmonic_y,2$ina($, )$hinge()2)$paren($greektext(q)$ina($, )$hinge()$greektext(f))$hinge()$in( = )$q($sqrt(5)$in( )$sqrt(6)$in( )$sup($e(),2$in( )$italictext(i)$in( )$greektext(f))$in( )$sup(sin,2)$paren($greektext(q)),8$in( )$sqrt($greektext(p)))
(c122) /***********************************************
Spherical Bessel, Neumann, Hankel Functions
*/
for n from 0 thru 3 do ldisplay(sbessel_j(n,x),sbessel_j[n](x))$
|$label(0,15,Times New Roman,$(e122$))sbessel_j$paren(0$ina($, )$hinge()x)$hinge()$in( = )$q(sin$paren(x),x)
|$label(0,15,Times New Roman,$(e123$))$sub(sbessel_j,0)$paren(x)$hinge()$in( = )$q(sin$paren(x),x)
|$label(0,15,Times New Roman,$(e124$))sbessel_j$paren(1$ina($, )$hinge()x)$hinge()$in( = )$q(sin$paren(x),$sup(x,2))$hinge()$in( - )$q(cos$paren(x),x)
|$label(0,15,Times New Roman,$(e125$))$sub(sbessel_j,1)$paren(x)$hinge()$in( = )$q(sin$paren(x),$sup(x,2))$hinge()$in( - )$q(cos$paren(x),x)
|$label(0,15,Times New Roman,$(e126$))sbessel_j$paren(2$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q($paren($sup(x,2)$in( - )3,$(,$))$in( )sin$paren(x),$sup(x,3))$hinge()$in( - )$q(3$in( )cos$paren(x),$sup(x,2))
|$label(0,15,Times New Roman,$(e127$))$sub(sbessel_j,2)$paren(x)$hinge()$in( = )$in( - )$q(sin$paren(x),x)$hinge()$in( + )$q(3$in( )sin$paren(x),$sup(x,3))$hinge()$in( - )$q(3$in( )cos$paren(x),$sup(x,2))
|$label(0,15,Times New Roman,$(e128$))sbessel_j$paren(3$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q($paren(6$in( )$sup(x,2)$in( - )15,$(,$))$in( )sin$paren(x),$sup(x,4))$hinge()$in( - )$q($paren(15$in( )x$in( - )$sup(x,3),$(,$))$in( )cos$paren(x),$sup(x,4))
|$label(0,15,Times New Roman,$(e129$))$sub(sbessel_j,3)$paren(x)$hinge()$in( = )$in( - )$q(6$in( )sin$paren(x),$sup(x,2))$hinge()$in( + )$q(15$in( )sin$paren(x),$sup(x,4))$hinge()$in( + )$q(cos$paren(x),x)$hinge()$in( - )$q(15$in( )cos$paren(x),$sup(x,3))
(c130) for n from 0 thru 3 do ldisplay(sneumann_n(n,x),sneumann_n[n](x))$
|$label(0,15,Times New Roman,$(e130$))sneumann_n$paren(0$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q(cos$paren(x),x)
|$label(0,15,Times New Roman,$(e131$))$sub(sneumann_n,0)$paren(x)$hinge()$in( = )$in( - )$q(cos$paren(x),x)
|$label(0,15,Times New Roman,$(e132$))sneumann_n$paren(1$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q(sin$paren(x),x)$hinge()$in( - )$q(cos$paren(x),$sup(x,2))
|$label(0,15,Times New Roman,$(e133$))$sub(sneumann_n,1)$paren(x)$hinge()$in( = )$in( - )$q(sin$paren(x),x)$hinge()$in( - )$q(cos$paren(x),$sup(x,2))
|$label(0,15,Times New Roman,$(e134$))sneumann_n$paren(2$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q(3$in( )sin$paren(x),$sup(x,2))$hinge()$in( - )$q($paren(3$in( - )$sup(x,2),$(,$))$in( )cos$paren(x),$sup(x,3))
|$label(0,15,Times New Roman,$(e135$))$sub(sneumann_n,2)$paren(x)$hinge()$in( = )$in( - )$q(3$in( )sin$paren(x),$sup(x,2))$hinge()$in( + )$q(cos$paren(x),x)$hinge()$in( - )$q(3$in( )cos$paren(x),$sup(x,3))
|$label(0,15,Times New Roman,$(e136$))sneumann_n$paren(3$ina($, )$hinge()x)$hinge()$in( = )$q($paren($sup(x,3)$in( - )15$in( )x,$(,$))$in( )sin$paren(x),$sup(x,4))$hinge()$in( + )$q($paren(6$in( )$sup(x,2)$in( - )15,$(,$))$in( )cos$paren(x),$sup(x,4))
|$label(0,15,Times New Roman,$(e137$))$sub(sneumann_n,3)$paren(x)$hinge()$in( = )$q(sin$paren(x),x)$hinge()$in( - )$q(15$in( )sin$paren(x),$sup(x,3))$hinge()$in( + )$q(6$in( )cos$paren(x),$sup(x,2))$hinge()$in( - )$q(15$in( )cos$paren(x),$sup(x,4))
(c138) for n from 0 thru 3 do ldisplay(shankel_h1(n,x),shankel_h1[n](x))$
|$label(0,15,Times New Roman,$(e138$))shankel_h1$paren(0$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q($italictext(i)$in( )$sup($e(),$italictext(i)$in( )x),x)
|$label(0,15,Times New Roman,$(e139$))$sub(shankel_h1,0)$paren(x)$hinge()$in( = )$in( - )$q($italictext(i)$in( )$sup($e(),$italictext(i)$in( )x),x)
|$label(0,15,Times New Roman,$(e140$))shankel_h1$paren(1$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q($paren(x$in( + )$italictext(i),$(,$))$in( )$sup($e(),$italictext(i)$in( )x),$sup(x,2))
|$label(0,15,Times New Roman,$(e141$))$sub(shankel_h1,1)$paren(x)$hinge()$in( = )$in( - )$q($paren(x$in( + )$italictext(i),$(,$))$in( )$sup($e(),$italictext(i)$in( )x),$sup(x,2))
|$label(0,15,Times New Roman,$(e142$))shankel_h1$paren(2$ina($, )$hinge()x)$hinge()$in( = )$q($paren($italictext(i)$in( )$sup(x,2)$in( - )3$in( )x$in( - )3$in( )$italictext(i),$(,$))$in( )$sup($e(),$italictext(i)$in( )x),$sup(x,3))
|$label(0,15,Times New Roman,$(e143$))$sub(shankel_h1,2)$paren(x)$hinge()$in( = )$q($italictext(i)$in( )$sup($e(),$italictext(i)$in( )x),x)$hinge()$in( - )$q(3$in( )$sup($e(),$italictext(i)$in( )x),$sup(x,2))$hinge()$in( - )$q(3$in( )$italictext(i)$in( )$sup($e(),$italictext(i)$in( )x),$sup(x,3))
|$label(0,15,Times New Roman,$(e144$))shankel_h1$paren(3$ina($, )$hinge()x)$hinge()$in( = )$q($paren($sup(x,3)$in( + )6$in( )$italictext(i)$in( )$sup(x,2)$in( - )15$in( )x$in( - )15$in( )$italictext(i),$(,$))$in( )$sup($e(),$italictext(i)$in( )x),$sup(x,4))
|$label(0,15,Times New Roman,$(e145$))$sub(shankel_h1,3)$paren(x)$hinge()$in( = )$q($sup($e(),$italictext(i)$in( )x),x)$hinge()$in( + )$q(6$in( )$italictext(i)$in( )$sup($e(),$italictext(i)$in( )x),$sup(x,2))$hinge()$in( - )$q(15$in( )$sup($e(),$italictext(i)$in( )x),$sup(x,3))$hinge()$in( - )$q(15$in( )$italictext(i)$in( )$sup($e(),$italictext(i)$in( )x),$sup(x,4))
(c146) for n from 0 thru 3 do ldisplay(shankel_h2(n,x),shankel_h2[n](x))$
|$label(0,15,Times New Roman,$(e146$))shankel_h2$paren(0$ina($, )$hinge()x)$hinge()$in( = )$q($italictext(i)$in( )$sup($e(),$in( - )$italictext(i)$in( )x),x)
|$label(0,15,Times New Roman,$(e147$))$sub(shankel_h2,0)$paren(x)$hinge()$in( = )$q($italictext(i)$in( )$sup($e(),$in( - )$italictext(i)$in( )x),x)
|$label(0,15,Times New Roman,$(e148$))shankel_h2$paren(1$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q($paren(x$in( - )$italictext(i),$(,$))$in( )$sup($e(),$in( - )$italictext(i)$in( )x),$sup(x,2))
|$label(0,15,Times New Roman,$(e149$))$sub(shankel_h2,1)$paren(x)$hinge()$in( = )$in( - )$q($paren(x$in( - )$italictext(i),$(,$))$in( )$sup($e(),$in( - )$italictext(i)$in( )x),$sup(x,2))
|$label(0,15,Times New Roman,$(e150$))shankel_h2$paren(2$ina($, )$hinge()x)$hinge()$in( = )$in( - )$q($paren($italictext(i)$in( )$sup(x,2)$in( + )3$in( )x$in( - )3$in( )$italictext(i),$(,$))$in( )$sup($e(),$in( - )$italictext(i)$in( )x),$sup(x,3))
|$label(0,15,Times New Roman,$(e151$))$sub(shankel_h2,2)$paren(x)$hinge()$in( = )$in( - )$q($italictext(i)$in( )$sup($e(),$in( - )$italictext(i)$in( )x),x)$hinge()$in( - )$q(3$in( )$sup($e(),$in( - )$italictext(i)$in( )x),$sup(x,2))$hinge()$in( + )$q(3$in( )$italictext(i)$in( )$sup($e(),$in( - )$italictext(i)$in( )x),$sup(x,3))
|$label(0,15,Times New Roman,$(e152$))shankel_h2$paren(3$ina($, )$hinge()x)$hinge()$in( = )$q($paren($sup(x,3)$in( - )6$in( )$italictext(i)$in( )$sup(x,2)$in( - )15$in( )x$in( + )15$in( )$italictext(i),$(,$))$in( )$sup($e(),$in( - )$italictext(i)$in( )x),$sup(x,4))
|$label(0,15,Times New Roman,$(e153$))$sub(shankel_h2,3)$paren(x)$hinge()$in( = )$q($sup($e(),$in( - )$italictext(i)$in( )x),x)$hinge()$in( - )$q(6$in( )$italictext(i)$in( )$sup($e(),$in( - )$italictext(i)$in( )x),$sup(x,2))$hinge()$in( - )$q(15$in( )$sup($e(),$in( - )$italictext(i)$in( )x),$sup(x,3))$hinge()$in( + )$q(15$in( )$italictext(i)$in( )$sup($e(),$in( - )$italictext(i)$in( )x),$sup(x,4))
(c154) /* *********************************************
The function POLY_REVERT can express an arbitrary polynomial
in terms of a list of shape function polynomials.
*/
test_poly : a * x^5 + b * x^2 $
(c155) shapes : makelist( chebyshev_t[n](x) ,n ,0 ,6 ) $
(c156) coefficients:poly_revert(test_poly,x,shapes);
|$label(0,15,Times New Roman,$(d156$))$open([)$q(b,2)$ina($, )$hinge()$q(5$in( )a,8)$ina($, )$hinge()$q(b,2)$ina($, )$hinge()$q(5$in( )a,16)$ina($, )$hinge()0$ina($, )$hinge()$q(a,16)$ina($, )$hinge()0$close(])
(c157) /* Verify the result
*/
ratsimp(apply("+",coefficients*shapes));
|$label(0,15,Times New Roman,$(d157$))a$in( )$sup(x,5)$hinge()$in( + )b$in( )$sup(x,2)
(c158) /* Clean up */
(remfunction(%p),remvalue(test_poly,shapes,coefficients))$